package com.itcast.java.common.base;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import lombok.Data;

/**
 * 基础响应
 *
 * @author hrz
 * @since 2020/9/17 0017
 */
@AllArgsConstructor
@Data
public class R<T> {

    private Integer code;

    private String message;

    private T data;

    /**
     * 返回普通数据的成功结果
     *
     * @param t 返回的数据
     * @param <T> 数据的类型
     * @return {@link R<T>}
     */
    public static <T> R<T> ok(T t) {
        return new R<>(RCode.OK.getCode(), RCode.OK.getMessage(), t);
    }

    /**
     * 返回分页数据的成功结果
     *
     * @param iPage mybatis-plus的分页结果
     * @param <T> list的泛型类型
     * @return {@link R<BasePageDTO<T>>}
     */
    public static <T> R<BasePageDTO<T>> ok(IPage<T> iPage) {
        return new R<>(RCode.OK.getCode(), RCode.OK.getMessage(), BasePageDTO.of(iPage));
    }

    /**
     * 返回失败的结果
     *
     * @param <T> null
     * @return {@link R<T>}
     */
    public static <T> R<T> fail() {
        return new R<>(RCode.FAIL.getCode(), RCode.FAIL.getMessage(), null);
    }

    /**
     * 返回失败的结果
     *
     * @param errorMessage 自定义错误信息
     * @param <T> null
     * @return {@link R<T>}
     */
    public static <T> R<T> fail(String errorMessage) {
        return new R<>(RCode.FAIL.getCode(), errorMessage, null);
    }
}
